########################################################
# RUN MAIN IV MODEL WITH JEWISH INSURGENTS (DV: COUNT) #
########################################################
# Author: Kasia Nalewajko
# First created: 3 December 2021
# Replicated: 17 June 2024

rm(list = ls())

# LOAD PACKAGES -----------------------------------------------------------

if (!require("dplyr")) install.packages("dplyr")
if (!require("estimatr")) install.packages("estimatr")
if (!require("modelsummary")) install.packages("modelsummary")
if (!require("fixest")) install.packages("fixest")
if (!require("sf")) install.packages("sf")
if (!require("spdep")) install.packages("spdep")

# LOAD DATA ---------------------------------------------------------------

load("./00 SUBMITTED/00 APSR final/04 replication_files/01 data/main.Rda")

# RUN MODELS --------------------------------------------------------------

# model with limited controls

IV_w_jew_ins_lim <- fixest::feols(log(all_jewish_victims+1) ~ log(pop1936+1) + synagogues_dummy + log(collabos_antijew1000+1) + log(DHI_milipol_sum1942+1) + area_sqkm  + longitude + longitudesq + latitude + latitudesq | zone5 + as.factor(ar_name)
                                  | log((FFIFFCall*1000/pop1936)+1) ~ log(mpf1000+1),
                                  cluster = ~c(id_bureau, resregion2),
                                  data = main)

# extract additional statistics
finfo <- fitstat( IV_w_jew_ins_lim, "ivf")
IV_w_jew_ins_lim_fstat <- round(finfo[["ivf1::log((FFIFFCall * 1000/pop1936) + 1)"]][["stat"]])
IV_w_jew_ins_lim_wh <- round(summary( IV_w_jew_ins_lim)$iv_wh[["p"]], digits = 4)

# run Moran test and extract the statistic
cantons_sf <- sf::st_read("./data/other/maps/france1940/CANTONS_1940/CANTONS_1940.shp")
obsRemoved <- abs( IV_w_jew_ins_lim[["obs_selection"]][["obsRemoved"]])
cantons_sf <- cantons_sf[-obsRemoved,]
spatial_weights_matrix <- poly2nb(pl = cantons_sf, row.names = cantons_sf$deppct, queen = T)
spatial_weights_matrix <- nb2listw(spatial_weights_matrix, zero.policy = T) 
IV_w_jew_ins_lim_res <- residuals( IV_w_jew_ins_lim)
IV_w_jew_ins_lim_moran <- moran.test(x = IV_w_jew_ins_lim_res, listw = spatial_weights_matrix, zero.policy = T)
IV_w_jew_ins_lim_moran <- round( IV_w_jew_ins_lim_moran$estimate[[1]], d = 3)


# fully controlled model

IV_w_jew_ins_controls <- fixest::feols(log(all_jewish_victims+1) ~ log(pop1936+1) + synagogues_dummy + log(collabos_antijew1000+1) + log(DHI_milipol_sum1942+1)  + catholic_churches + log(FRANCISTE_36_1_pct+1) + log(ActionFrancaise_19_pct+1) + turnout_36_1_pct + log(nuance_droite_36_1_pct+1) + log(nuance_centredroit_36_1_pct+1) + log(nuance_centregauche_36_1_pct+1) + log(nuance_gauche_36_1_pct+1) + log(nuance_extremegauche_36_1_pct+1) + area_sqkm + longitude + longitudesq + latitude + latitudesq | zone5 + as.factor(ar_name) #  + log(nuance_extremedroite_36_1_pct+1)
                                       | log((FFIFFCall*1000/pop1936)+1) ~ log(mpf1000+1),
                                       cluster = ~c(id_bureau, resregion2), 
                                       data = main)

# extract additional statistics
finfo <- fitstat(IV_w_jew_ins_controls, "ivf")
IV_w_jew_ins_controls_fstat <- round(finfo[["ivf1::log((FFIFFCall * 1000/pop1936) + 1)"]][["stat"]])
IV_w_jew_ins_controls_wh <- round(summary(IV_w_jew_ins_controls)$iv_wh[["p"]], digits = 4)

# run Moran test and extract the statistic
cantons_sf <- sf::st_read("./data/other/maps/france1940/CANTONS_1940/CANTONS_1940.shp")
obsRemoved <- abs(IV_w_jew_ins_controls[["obs_selection"]][["obsRemoved"]])
cantons_sf <- cantons_sf[-obsRemoved,]
spatial_weights_matrix <- poly2nb(pl = cantons_sf, row.names = cantons_sf$deppct, queen = T)
spatial_weights_matrix <- nb2listw(spatial_weights_matrix, zero.policy = T) 
mcontrols_county_res <- residuals(IV_w_jew_ins_controls)
IV_w_jew_ins_controls_moran <- moran.test(x = mcontrols_county_res, listw = spatial_weights_matrix, zero.policy = T)
IV_w_jew_ins_controls_moran <- round(IV_w_jew_ins_controls_moran$estimate[[1]], d = 3)

# PREVIEW -------

msummary(list(
  'First Stage' = IV_w_jew_ins_lim$iv_first_stage[[1]],
  'Second Stage' = IV_w_jew_ins_lim,
  'First Stage' = IV_w_jew_ins_controls$iv_first_stage[[1]],
  'Second Stage' = IV_w_jew_ins_controls
),
stars = c('*' = .1, '**' = .05, '***' = .01))

# EXPORT --------

# add_rows
add_stats <- tibble::tribble(
  ~x, ~y, ~q, ~w, ~l,
  'F stat. (1st stage)', IV_w_jew_ins_lim_fstat, IV_w_jew_ins_lim_fstat, IV_w_jew_ins_controls_fstat, IV_w_jew_ins_controls_fstat, 
  'Moran stat.', IV_w_jew_ins_lim_moran, IV_w_jew_ins_lim_moran, IV_w_jew_ins_controls_moran, IV_w_jew_ins_controls_moran,
  'Wu-Hausman p-value', IV_w_jew_ins_lim_wh, IV_w_jew_ins_lim_wh, IV_w_jew_ins_controls_wh, IV_w_jew_ins_controls_wh
)

attr(add_stats, 'position') <- c(48, 49, 50)

msummary(list(
  'First Stage' = IV_w_jew_ins_lim$iv_first_stage[[1]],
  'Second Stage' = IV_w_jew_ins_lim,
  'First Stage' = IV_w_jew_ins_controls$iv_first_stage[[1]],
  'Second Stage' = IV_w_jew_ins_controls
),
stars = c('*' = .1, '**' = .05, '***' = .01),
gof_omit = "AIC|BIC|RMSE|R2 Within|R2 Within Adj.",
coef_omit = "zone5",
add_rows = add_stats,
output = "latex",
coef_rename = c("log(mpf1000 + 1)" = "WWI military death rates",
                "fit_log((FFIFFCall * 1000/pop1936) + 1)" = "Insurgent presence (incl. Jewish insurgents)",
                "log(pop1936 + 1)" = "1936 population",
                "log(collabos_antijew1000 + 1)" = "Collaborators",
                "log(DHI_milipol_sum1942 + 1)" = "1942 state presence",
                "synagogues_dummy" = "Synagogues",
                "area_sqkm" = "Area size (km2)",
                "longitude" = "Longitude",
                "latitude" = "Latitude",
                "longitudesq" = "Longitude (sq)",
                "latitudesq" = "Latitude (sq)",
                "log(allocated_jpop + 1)" = "1941 Jewish population",
                "catholic_churches" = "Catholic churches",
                "log(FRANCISTE_36_1_pct + 1)" = "Franciste vote 1936",
                "log(ActionFrancaise_19_pct + 1)" = "Action Française vote 1919",
                "turnout_36_1_pct" = "Turnout 1936",
                "log(nuance_droite_36_1_pct + 1)" = "Right vote 1936",
                "log(nuance_centredroit_36_1_pct + 1)" = "Centre-right vote 1936",
                "log(nuance_centregauche_36_1_pct + 1)" = "Centre-left vote 1936",
                "log(nuance_gauche_36_1_pct + 1)" = "Left vote 1936",
                "log(nuance_extremegauche_36_1_pct + 1)" = "Extreme left vote 1936"
),
title = "Main results incl. Jewish insurgents. Dependent variable: Number Holocaust victims (logged)"
)
